// src/utils/encrypt.ts
import CryptoJS from 'crypto-js'

// const SECRET_KEY = 'VrnebKpyHTMfUiOjIxnRO0up8ADDtWbi'
// const encoder = new TextEncoder(); // 默认编码为 UTF-8
// const uint8Array0 = encoder.encode(SECRET_KEY);

const uint8Array = new Uint8Array([86, 114, 110, 101, 98, 75, 112, 121, 72, 84, 77, 102, 85, 105, 79, 106, 73, 120, 110, 82, 79, 48, 117, 112, 56, 65, 68, 68, 116, 87, 98, 105])

const decoder = new TextDecoder()
// const decodedString = decoder.decode(uint8Array);


// 注意：密钥处理方式必须与 Java 端一致（直接使用原始字符串）
// const key = CryptoJS.enc.Utf8.parse(SECRET_KEY) // 使用 UTF8 编码
// const iv = CryptoJS.enc.Utf8.parse(decodedString.slice(0, 16)) // 取前 16 字节作为 IV


/**
 * AES CBC 加密（与 Java 后端兼容）
 */
export const encrypt = (data: any) => {
	/*console.log("uint8Array0",uint8Array0)
    console.log("decodedString",decodedString)
    console.log("iv",iv)*/
  const cipherText = CryptoJS.AES.encrypt(
    JSON.stringify(data),
      CryptoJS.enc.Utf8.parse(decoder.decode(uint8Array)),
    {
      iv: CryptoJS.enc.Utf8.parse(decoder.decode(uint8Array).slice(0, 16)),
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    }
  )
  return cipherText.toString()
}

/**
 * AES CBC 解密（与 Java 后端兼容）
 */
export const decrypt = (encryptedData: string) => {
  if ( !encryptedData || encryptedData.length === 0) {
    return ""
  }
  try {
    const bytes = CryptoJS.AES.decrypt(
      encryptedData,
        CryptoJS.enc.Utf8.parse(decoder.decode(uint8Array)),
      {
        iv: CryptoJS.enc.Utf8.parse(decoder.decode(uint8Array).slice(0, 16)),
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
      }
    )
    const decryptedStr = bytes.toString(CryptoJS.enc.Utf8)
    // 判断是否是JSON字符串 或者  json数组字符串
    if (decryptedStr.startsWith("{") || decryptedStr.startsWith("[")) {
      return JSON.parse(decryptedStr)
    }
    return decryptedStr
  } catch (e) {
    console.error("解密失败:", e)
    throw e
  }
}
